package com.piggy.logi.sys.service.impl;

import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.StrUtil;
import com.piggy.logi.sys.api.domain.LogiSysUser;
import com.piggy.logi.sys.service.ILogiSysUserOnlineService;
import com.piggy.logi.sys.domain.LogiSysUserOnline;
import com.piggy.sys.api.model.LoginUser;
import org.springframework.stereotype.Service;

/**
 * 在线用户 服务层处理
 *
 * @author shark
 */
@Service
public class LogiSysUserOnlineServiceImpl implements ILogiSysUserOnlineService {
    /**
     * 通过登录地址查询信息
     *
     * @param ipaddr 登录地址
     * @param user   用户信息
     * @return 在线用户信息
     */
    @Override
    public LogiSysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser<LogiSysUser> user) {
        if (StrUtil.equals(ipaddr, user.getIpaddr())) {
            return loginUserToUserOnline(user);
        }
        return null;
    }

    /**
     * 通过用户名称查询信息
     *
     * @param userName 用户名称
     * @param user     用户信息
     * @return 在线用户信息
     */
    @Override
    public LogiSysUserOnline selectOnlineByUserName(String userName, LoginUser<LogiSysUser> user) {
        if (StrUtil.equals(userName, user.getUserName())) {
            return loginUserToUserOnline(user);
        }
        return null;
    }

    /**
     * 通过登录地址/用户名称查询信息
     *
     * @param ipaddr   登录地址
     * @param userName 用户名称
     * @param user     用户信息
     * @return 在线用户信息
     */
    @Override
    public LogiSysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser<LogiSysUser> user) {
        if (StrUtil.equals(ipaddr, user.getIpaddr()) && StrUtil.equals(userName, user.getUserName())) {
            return loginUserToUserOnline(user);
        }
        return null;
    }

    /**
     * 设置在线用户信息
     *
     * @param user 用户信息
     * @return 在线用户
     */
    @Override
    public LogiSysUserOnline loginUserToUserOnline(LoginUser<LogiSysUser> user) {
        if (Validator.isNull(user) || Validator.isNull(user.getSysUser())) {
            return null;
        }
        LogiSysUserOnline logiSysUserOnline = new LogiSysUserOnline();
        logiSysUserOnline.setTokenId(user.getToken());
        logiSysUserOnline.setUserName(user.getUserName());
        logiSysUserOnline.setIpaddr(user.getIpaddr());
        logiSysUserOnline.setLoginLocation(user.getLoginLocation());
        logiSysUserOnline.setBrowser(user.getBrowser());
        logiSysUserOnline.setOs(user.getOs());
        logiSysUserOnline.setLoginTime(user.getLoginTime());
        if (Validator.isNotNull(user.getSysUser().getDept())) {
            logiSysUserOnline.setDeptName(user.getSysUser().getDept().getDeptName());
        }
        return logiSysUserOnline;
    }
}
